import zlib from 'zlib' // zlib 模块提供数据压缩和解压缩功能
import fs from 'node:fs' // 引入 Node.js 的 fs 模块用于文件操作
import express from 'express'

const router = express.Router() //路由模块
/* 压缩 */
router.get('/createGzip', (req, res) => {
  // 创建可读流和可写流
  const readStream = fs.createReadStream('./public/zlibFile/index.txt') // 创建可读流，读取名为 index.txt 的文件
  const writeStream = fs.createWriteStream('./public/zlibFile/index.txt.gz') // 创建可写流，将压缩后的数据写入 index.txt.gz 文件

  // 使用管道将可读流中的数据通过 Gzip 压缩，再通过管道传输到可写流中进行写入
  readStream.pipe(zlib.createGzip()).pipe(writeStream)

  res.send({
    val: 'zlib createGzip ok',
  })
})

router.get('/createGunzip', (req, res) => {
  // 创建可读流和可写流
  const readStream = fs.createReadStream('./public/zlibFile/index.txt.gz') // 创建可读流，读取名为 index.txt 的文件
  const writeStream = fs.createWriteStream('./public/zlibFile/index2.txt') // 创建可写流，将压缩后的数据写入 index.txt.gz 文件

  // 使用管道将可读流中的数据通过 Gzip 压缩，再通过管道传输到可写流中进行写入
  readStream.pipe(zlib.createGunzip()).pipe(writeStream)

  res.send({
    val: 'zlib  createGunzip ok',
  })
})
/* 无损压缩 deflate 使用 createDeflate方法  */
router.get('/createDeflate', (req, res) => {
  // 创建可读流和可写流
  const readStream = fs.createReadStream('./public/zlibFile/index.txt') // 创建可读流，读取名为 index.txt 的文件
  const writeStream = fs.createWriteStream('./public/zlibFile/index.txt.deflate') // 创建可写流，将压缩后的数据写入 index.txt.gz 文件

  // 使用管道将可读流中的数据通过 Gzip 压缩，再通过管道传输到可写流中进行写入
  readStream.pipe(zlib.createDeflate()).pipe(writeStream)

  res.send({
    val: 'zlib  createDeflate ok',
  })
})

router.get('/createInflate', (req, res) => {
  // 创建可读流和可写流
  const readStream = fs.createReadStream('./public/zlibFile/index.txt.deflate') // 创建可读流，读取名为 index.txt 的文件
  const writeStream = fs.createWriteStream('./public/zlibFile/index3.txt') // 创建可写流，将压缩后的数据写入 index.txt.gz 文件

  // 使用管道将可读流中的数据通过 Gzip 压缩，再通过管道传输到可写流中进行写入
  readStream.pipe(zlib.createInflate()).pipe(writeStream)

  res.send({
    val: 'zlib createInflate ok',
  })
})

export default router
